!=========================================================================== ! **** Special objects and routines **** Object verhaaltracker with status 1, grot 1, brand 0, draak 0, bruiloft 0, fotoalbum 0, has ; [DeathMessage; if(deadflag == 3) { print "THE END"; } ]; [AfterLife; VraagToets(0,0,0); ]; [ Herinner onderwerp; switch(onderwerp){ 1: ! Bruiloft VraagToets(0,1,0); style bold; print "^^With beating heart you enter the village square. You feel awkward in the grey costume you have bought especially for this event--it doesn't befit an ordinary boy like you. A crowd has assembled before the church. The entire village has come: you can see you parents, and somewhat further away the parents of Hilde.^^ As you halt to straighten the red flower in your button hole, someone looks in your direction and calls your name. Everyone turns around, and they start cheering and crying your name. You feel the heat rise to your face, and your cheeks become the colour of the flower.^"; style roman; VraagToets(0,0,0); style bold; print "You don't like to be the centre of attention. You don't like large groups of people at all. That is why you spend most of your time alone, for example in the forest, or lost in carving wood. But being alone has disadvantages too--the black emptiness of loneliness has more than once threatened to devour you. It is best to be together with one other person you can love, with whom you are safe and immune for the sorrow of the world. That dream will come true today."; style roman; VraagToets(0,1,0); style bold; print "^^Finally! Bright as the sun of spring, Hilde floats towards you. Her long blond hairs frame an angel's face that is always adorned by a broad smile. In her white bridal dress she is an enchanted princess, a more beautiful, more pure and more innocent girl than this world deserves to possess. And she is coming towards you, her eyes full of love and tenderness."; style roman; VraagToets(0,1,0); style bold; print "^^~Yes, I will,~ she says, but her eyes are no longer turned towards the minister: they have found yours. You take her hand, her soft, tender hand, and as carefully as you can you put the ring on her finger. She does the same with you, and then your heads lean towards each other, and your lips come together to seal the pact of eternal love more strongly than words ever could. People cheer and applaud, but you stand on an island of silence and experience the purity of being together."; style roman; Vraagtoets(1,1,1); verhaaltracker.bruiloft = 1; 2: ! Fotoalbum switch(verhaaltracker.fotoalbum){ 0: print "Hilde sticks all the pictures that are made of your family into this thick album, ever since Maartje's birth. You open the album, and see Maartje's birth announcement card. December the nineteenth, only a few days before Christmas. You turn the page, and there she is again, a baby lying in bath. Hilde, exhausted in the hospital bed, laughs as she holds a crying Maartje in her arms. You, proud as a peacock, hold her up to the photographer. The grandparents from both sides are standing around the hospital bed.^ ^ For a while you let yourself drift away on a stream of blissful memories, but the thought of the baron quickly brings you back to reality. Disturbed, you look up. There are more photographs in the album.^"; verhaaltracker.fotoalbum = 1; return true; 1: print "You leaf through the album, seeing Maartje grow up. Dozens of moments from an idyllic childhood have been immortalised."; VraagToets(0,0,0); style bold; print "For months you have secretly worked in the shed on a dollhouse for Maartje's fourth birthday. Three stories, with little doors and windows that can actually open and close, all kinds of furniture, and wooden dolls with finely carved faces that make the house their home. Hilde made the curtains, the carpets and little clothes for the dolls. Now the beautiful result stands in a corner of the room, wrapped in colourful paper, and Maartje runs towards it and tears into the paper. She gives a cry of surprise, then stares at the dollhouse for minutes in amazement, opens the doors, moves the dolls, closes the curtains. Then she turns around and runs towards you, laughing, to thank you. Her high cooing still resounds in your ears, after all those years.^"; style roman; verhaaltracker.fotoalbum = 2; return true; 2: print "You leaf through the album, seeing Maartje grow up. Dozens of moments from an idyllic childhood have been immortalised."; VraagToets(0,0,0); style bold; print "It is in the middle of the summer, and the three of you have gone for a walk and an old-fashioned picnic in the woods. Maartje, seven years old, constantly runs ahead, while you and Hilde keep a steady pace, carrying the heavy basket. ~Daddy!,~ she suddenly exclaims from somewhere between the trees to your left. ~Daddy, come and take a look!~ Hilde rolls her eyes and grabs the basket with two hands so you are free to enter the forest. Some twenty yards from the path, she is standing next to a buddleia which is so swarming with small whites that its purple flowers can hardly be seen. ~Look daddy!,~ she exclaims, and jumps towards the bush. All the butterflies fly up, and for a moment she is an angel in a white cloud of wings.^"; style roman; verhaaltracker.fotoalbum = 3; return true; 3: print "You leaf through the album, seeing Maartje grow up. Dozens of moments from an idyllic childhood have been immortalised."; VraagToets(0,0,0); style bold; print "It is half a year later, in the icy months of winter. You have gone sledging with Maartje over the thick layer of snow that has deposited itself on the village during the past few days. You have sledged all the way up to the Barentopf. ~Daddy, my hands hurt,~ Maartje complains. ~They are so cold.~ Carefully, you take her small hands into your big ones and rub them warm. You lean forward and kiss her on her cold brow.^"; style roman; verhaaltracker.fotoalbum = 4; return true; 4: print "The last pictures in the album are of Maartje's ninth birthday. Surprised, you turn the pages thereafter. Only traces of glue breach the monotonous black where the pictures of the past three years should be displayed.^"; verhaaltracker.fotoalbum = 5; }; default: ""; }; ]; [EndSceneOne; VraagToets(1,1,0); style bold; print "^^^^^^^^ ^ THE BARON^"; style roman; print "^ An interactive story by Victor Gijsbers."; VraagToets(0,1,0); style bold; print "^^^ Chi l'anima mi lacera?^ Chi m'agita le viscere?^ Che strazio, ohim@`e, che smania!^ Che inferno, che terror!^^^ ~Who lacerates my soul?^ Who tortures my body?^ What torment, oh me, what agony!^ What a Hell! What a terror!~^^^^^"; style roman; print " From the opera ~Don Giovanni~^ Text: Lorenzo da Ponte^ Music: Wolfgang A. Mozart"; VraagToets(0,1,0); print "^^A penetrating, dissonant sound twice breaks the silence of the night, waking you from restless sleep. After the second note the church bell falls silent, and the stillness of the winter night settles over the village once again. You rub the sleep from your eyes. Very carefully, because you do not wish to wake your wife Hilde, you step out of the bed. She would certainly try to stop you. ^^^^"; VraagToets(0,0,0); verhaaltracker.status = 2; verhaaltracker.brand = 0; verhaaltracker.draak = 0; StopDaemon(draak); PlayerTo(mijnslaap); remove bijl; remove harnas; remove helm; remove draak_vuur; return true; ]; [ TuinNaarBos; print "A second you hesitate, but then you determinedly step onto the road towards the dark forest. No sign of life is apparent in the village. Slowly you become angry at all your neighbours and fellow villagers. Where are they when you need them? Why is there not a single one among them with the guts to free Maartje? A lack of love--that is what enables people to ignore the problems of others. Everybody knows what has happened--but nobody does anything, because nobody feels responsible."; VraagToets (0,0,0); print "After several minutes you reach the edge of the woods. It is like walking into the dark jaws of a gigantic and evil beast to follow the path under the overhanging foliage of the coniferous trees. The light of the moon hardly reaches the ground, and several times you stumble over large branches that lie in wait under the snow like traps."; VraagToets (0,0,0); print "But you firmly step onwards while you try to devise a plan for entering the baron's castle. Then, suddenly, the howling of wolves starts you out of your reflections. It is hard to judge, but you would be surprised if they are more than a kilometer away from you. And it is at least another ten kilometers eastward to the baron's castle.^^"; verhaaltracker.status = 3; PlayerTo(bos_1); return true; ]; [SmeltendTraliewerk; while (child(kasteel_kerker_cel)) move child(kasteel_kerker_cel) to kasteel_kerker; remove kasteel_kerker_cel; give kasteel_kerker_tralies general; give toorts ~light; give toorts ~general; print "You throw the key through the dungeon, as far as you can, so you can be sure you will never be able to reach it again. Thus you have sealed your fate."; VraagToets(0,0,0); print "After several hours you sink into an uneasy sleep. In your dream the face of Maartje appears again and again, always with a look of deep pain in her eyes, and then suddenly disappears when the roaring laughter of the baron fills the world."; VraagToets(0,0,0); if(TestScope(toorts)) { print "You start awake, and see that the torch has gone out. "; if(kerker_luik has open) { print "From the other side of the room, the little key twinkles in the starlight--but it might as well have been at the other end of the world. "; } print "A short while later you fall asleep again."; } else { print "You start awake, but nothing has changed. From the other side of the room, the little key twinkles in the starlight--but it might as well have been at the other end of the world. A short while later you fall asleep again."; } VraagToets(0,0,0); print "Now you dream that you yourself are a baron. You are clad in a suit of armour, hold a big axe in your hand and have been ordered to kill a monstrous dragon. Carefully but valorously you walk through a cave, and as soon as the abomination sees you, you run at him, waving your axe. But he raises his head and breathes fire--heat and light and pain fill the world, and you feel how the metal of your armour melts and enters your body."; VraagToets(0,0,0); "Startled you open your eyes, and see how the iron grating of the cell has become white hot and is dripping down to the floor in thick drops, collapses, and immediately cools to an amorphous black mass of metal on the floor."; ]; [TorenOmhoog; StopDaemon(kasteel_toren_stapels); if(kasteel_toren_stapels.verbrand == 0) print "You run up the stairs, which turn and turn until you must be almost at the tower's top. There they lead into a large room.^"; if(kasteel_toren_stapels.verbrand > 0 && kasteel_toren_stapels.verbrand < 4) print "You run up the smoke-filled stairs, which turn and turn until you must be almost at the tower's top. Like an angel of vengeance you step out of the smoke, into a large room.^"; if(kasteel_toren_stapels.verbrand == 4) print "^Coughing and wheezing you run up the stairs, the only way out, pursued by thick tendrils of black smoke. After a climb which must have taken you to the very top of the tower, you enter a room which is almost smoke-free.^"; if(kasteel_toren_stapels.verbrand > 4) print "You run up the blackened stairs, which turn and turn until you must be almost at the tower's top. There they lead into a large room.^"; PlayerTo(kasteel_toren_2); return true; ]; [PlayerOrders; Attack: if(noun == player && actor == player) { if(verhaaltracker.grot == 1 && verhaaltracker.brand > 0 && parent(bijl) == player) { print "The pain, the light, the dragon--everything disappears to the background when you retreat into the inner calm of your soul. You have lost; your quest was a failure; all you can d is take the honourable way out. Calmly and serenely, but with quickness and precision, you prepare yourself. "; if(helm has worn) print "You take off the helmet. "; print "You tightly grip the axe, turn the blade your way, and cut your own head in two with a single blow."; EndSceneOne(); return true; }; }; return false; Burn: if(noun == player && actor == player) { if(TestScope(toorts,player)) { if(second == toorts || second == nothing) { if(toorts has general) { if(verhaaltracker.status == 5) { "In these empty halls, few will be impressed by your self-immolation."; } else { ZelfVerbrand(); return true; }; } else { "Now that the torch has gone out, it can't set anything on fire."; } } else { "You can't use that to make a fire."; } } } return false; default: return false; ]; [BecomeWolf; ChangePlayer(wolvin); self.status = 99; give jongewolf proper; move selfobj to grot_hal; move dode_ik to bos_2; print "The warm, sweet blood pours over your tongue. Hungrily you tear chunks of meat from the body and devour them. Your child too starts feasting on the prey, the first thing he has eaten this week apart from half a vole. You turn towards him and lick his fur. He growls contentedly, then continues to eat. He knows of no more troubles, and imagines that he is safe."; VraagToets(0,0,0); print "But you know better. As long as the hunter lives in the big stone house neither of you is safe. And now this unexpected meal has given you new strength, the time has come to deal with him.^"; return true; ]; [ZelfVerbrand; print "You know that you are doomed, so why put off the pain any longer? Grimly, you touch the flame of the torch to your own clothing. The fire, immediately followed by the pain, spreads over your entire body, until even your hairs and your face are burning and you see nothing but fire and flames. You start running around like a savage, screaming and cursing.^^"; if(baron.state == 1 || baron.state == 3) print "From his throne, the baron laughs roaringly. ~Very good, my dear man, very good! You finally understand who you are and what you are!~^^"; if(baron.state == 2) print "The pathetic crying of the baron increases in intensity when he sees you and understands what his eternal fate will be.^^"; if(baron.state == 4) print "~My God, my God!~, you hear the baron exclaim fearfully from is throne, after which he starts praying the Lord's Prayer as is his life depends on it.^^"; print "After a short while you suddenly collide with the bronze doors in the back of the room. The burning man that has been engraved on them looks at you with a huge grin, and even seems to beckon you to come nearer."; VraagToets(0,0,0); print "You walk towards him, and the doors start swinging open, away from you--behind them lies nothing but darkness. You walk onwards, and when you cross the threshold the left door falls crashes down, emitting the sound of a huge copper gong. Immediately afterwards, the right door falls down too and another tremendous, harrowing dissonance resounds. The fire around you lessens each moment, while your soul burns ever stronger. You take another step, and are standing..."; VraagToets(0,0,0); verhaaltracker.status = 7; PlayerTo(final_overloop); while(child(player)) remove child(player); StopDaemon(baron); return true; ]; [DoodMijMetScherf; if(location == final_haarslaap && maartje.state == 1) { print "With a pale face you look at Maartje, and show her the shard.^^"; dood_mij_bij_maartje_dialoog.select(1); } print "You stare at the razor-sharp piece of glass, but you know that there is nothing else to do. You put the point of the shard on the skin of your wrist, exactly where the artery is, and press. A drop of blood wells up from the small hole.^^"; twijfel_aan_zelfmoord_dialoog.select(1); if(twijfel_aan_zelfmoord_dialoog.twijfel == 1) return true; print "With a fierce slash you cut in the direction of your arm, opening the artery over a length of inches. Bright red blood spurts out, over your hands, over the shard, over your nightshirt, over the floor. You sink to your knees. Now it is only a matter of time."; VraagToets(0,0,0); print "While your life flows away slowly, questions arise in your mind, questions to which the answers are suddenly very clear.^^"; if(maartje.state == 1) {doodmijmetscherf_vragen.select(1);} ! Ze leeft nog. else {doodmijmetscherf_vragen_2.select(1);} return true; ]; Object doodmijmetscherf_vragen class Character, with quip [a b; switch (a) { 12: print "Was this the easy way out?^^"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Yes. I could not continue living with this guilt."; 22: print "Will Maartje ever forgive you?^^"; 23: qqon = true; killz = true; killq = true; 24: return Qlist(b, 2, 4, 5); 31: "No. It was the hardest sacrifice I ever made."; 32: print "Will Maartje ever forgive you?^^"; 33: qqon = true; killz = true; killq = true; 34: return Qlist(b, 2, 4, 5); 41: "No. No matter whether I have ruined her life forever or not, she will always hate me."; 42: deadflag = 3; return true; 43: qqon = true; killz = true; killq = true; 51: "Yes. With time the wounds will heal and her hate will diminish; and perhaps there will be a day when she will understand me, just a little, and when she will feel just a very tiny amount of pity--or perhaps, even of love."; 52: deadflag = 3; return true; 53: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; Object doodmijmetscherf_vragen_2 class Character, with quip [a b; switch (a) { 12: print "Was this the easy way out?^^"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Yes. I could not continue living with this guilt."; 22: deadflag = 3; return true; 23: qqon = true; killz = true; killq = true; 31: "No. It was the hardest sacrifice I ever made."; 32: deadflag = 3; return true; 33: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; Object twijfel_aan_zelfmoord_dialoog class Character, with twijfel 1, quip [a b; switch (a) { 12: print "Do you have the courage to go on with this?^^"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Yes. I am strong enough."; 22: self.twijfel = 0; 23: qqon = true; killz = true; killq = true; 31: "No. I cannot do it."; 32: self.twijfel = 1; 33: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; [ZijDoodtMijMetScherf x; ! x = 1 halsslagader, 2 buik, 3 kruis print "You stare at the razor-sharp piece of glass as it moves towards you, but you know that this is the only solution. "; if(x == 1) { print "She puts the point of the shard on the skin of your throat, exactly where the artery is, and presses. A drop of blood wells up from the small hole."; VraagToets(0,0,0); print "One last time she looks at you, horror and sadness fighting each other in her eyes. The she slashes the glass across your neck, opening the artery for a length of inches. Bright red blood spurts out, over your hands, over the shard, over your nightshirt, over the floor. You sink to your knees. Now it is only a matter of time."; } if(x == 2) { print "She puts the point of the shard on the skin of your abdomen, where most of your internal organs are, and presses. A fierce bolt of pain shoots through your body."; VraagToets(0,0,0); print "One last time she looks at you, a look full of horror and hate. With a fierce slash she opens your belly, and your intestines tumble out. There is hardly any blood, but the pain is so strong that you can hardly think. Now it is only a matter of time--a matter of long, agonising minutes."; } if(x == 3) { print "With one hand, Maartje grabs your sex--as mechanically as she always does. But now she has the shard in her other hand, and fascinated you stare at the glass, glinting in the moonlight, as she presses it with the sharpest side against your penis."; VraagToets(0,0,0); print "One last time she looks at you, a look full of hate and anger. Then she cuts to and fro several times; pain shoots up from your crotch through your entire body, you gasp for breath and then she tears the last skin and blood gushes from the open wound in your crotch where your manhood used to be."; VraagToets(0,0,0); print "~Bastard!~, Maartje screams at you, crying, with a breaking voice, and she stabs the shard into your abdomen. ~You ruined my life!~ Again she stabs you, and again, like an enraged and insane avenging angel, and again, and you hardly feel it because everything becomes black and heavy before your eyes and when you topple over and hit the hard edge of the bed with your head you do not notice anymore..."; } VraagToets(0,0,0); print "As you lay dying, questions arise in your mind, questions to which the answers are suddenly very clear.^^"; doodmijmetscherf_vragen.select(1); return true; ]; [MaartjeZoen x; if(maartje.state == 1) { ! Ze leeft nog switch(x) { 1: print "You lean forward and put your lips on Maartje's first softly, but soon you cannot restrain yourself any longer. Your tongue forces her mouth to open, and you kiss her wildly and full of lust. Meanwhile, your hands have found her small breasts, and you caress the soft flesh. Maartje has closed her eyes and suffers in resignation."; 2: print "You lean forward to Maartje and kiss her; first her face, then her neck, her arms, her breasts, her belly, her legs, her sex. Wherever they can find it, your hands caress her soft skin. Without speaking and without moving, Maartje suffers your attention resignedly."; } VraagToets(0,0,0); maartje_zoen_tweede_dialoog.select(1); print "And again you play the game of lust."; VraagToets(0,0,0); verkracht_vragen.select(1); return true; } else { ! Ze is dood print "You lean over Maartje's corpse, and start to kiss her: first her dead lips, then her neck, her arms, her breasts, her belly, her legs, her sex. Even in death she still enchants you."; VraagToets(0,0,0); maartje_zoen_derde_dialoog.select(1); return true; } ]; [MaartjeStreel x; if(maartje.state == 1) { ! Ze leeft nog switch(x) { 1: print "Your fingers trace tenders paths over Maartje's pale skin, over her little face, her throat and her neck, past her breasts and over her belly. Maartje appears only to wish to sink as deeply into the mattress as possible to escape from your searching hands, but you cannot restrain yourself and caress her ever more passionately."; 2: print "Hungrily, your hands throw themselves on Maartje's body. Unerringly, your fingers find their way between Maartje's legs. Meanwhile, you lean forward to kiss her on her mouth. Your breath goes ever more quickly."; } VraagToets(0,0,0); maartje_zoen_tweede_dialoog.select(1); print "And again you play the game of lust."; VraagToets(0,0,0); verkracht_vragen.select(1); return true; } else { ! Ze is dood print "You lean over Maartje's corpse, and start to caress her: first her dead lips, then the pale skin of her neck, her arms, her breasts, her belly, her legs, the curly hair of her sex. Even in death she still enchants you."; VraagToets(0,0,0); maartje_zoen_derde_dialoog.select(1); return true; } ]; [MaartjeVrij; if(maartje.state == 1) { ! Ze leeft nog maartje_zoen_tweede_dialoog.select(1); print "And again you play the game of lust."; VraagToets(0,0,0); verkracht_vragen.select(1); return true; } else { ! Ze is dood print "You lean forward over Maartje's defenceless corpse, overcome by a desire for the flesh that can enchant your mind even in death. Passionately, you kiss her dead face."; VraagToets(0,0,0); maartje_zoen_derde_dialoog.select(1); return true; } ]; Object maartje_zoen_tweede_dialoog class Character, with quip [a b; switch (a) { 12: "While you get into bed, you whisper:"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 3, 2, 3, 4); 21: "~I am sorry, but I cannot help it.~"; 22: 23: qqon = true; killz = true; killq = true; 31: "~I love you, Maartje, I love you so very much.~"; 32: 33: qqon = true; killz = true; killq = true; 41: "~It is your own fault, do you hear that? You shouldn't have been so beautiful.~"; 42: 43: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; Object verkracht_vragen class Character, with quip [a b; switch (a) { 12: print "Will the circle even be broken?^^"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Yes. Not tonight, and perhaps not the night after--but once it will be broken."; 22: print "Are you guilty?^^"; 23: qqon = true; killz = true; killq = true; 24: return Qlist(b, 3, 4, 5, 6); 31: "No. I will never be strong enough to break it."; 32: print "Are you guilty?^^"; 33: qqon = true; killz = true; killq = true; 34: return Qlist(b, 3, 4, 5, 6); 41: "More than guilty: I am no longer human, I am a monster."; 42: deadflag = 3; return true; 43: qqon = true; killz = true; killq = true; 51: "Yes, I am as guilty as a human has ever been."; 52: deadflag = 3; return true; 53: qqon = true; killz = true; killq = true; 61: "No, all I am is weak: despise me, but do not condemn me."; 62: deadflag = 3; return true; 63: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; Object maartje_zoen_derde_dialoog class Character, with quip [a b; switch (a) { 12: 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Restrain yourself."; 22: "As soon as you realise what you are doing, you jump back in horror. Even her dead body, even that is so beautiful, so sweet, so...--resolute, you turn around."; 23: qqon = true; killz = true; killq = true; 31: "Take her as you have so often taken her."; 32: print "You lie down on Maartje, caress her soft skin, kiss her pale lips, smell the odour of her hairs. Each second your desire grows stronger, until it takes you over completely^^For the last time, you play the game of lust."; VraagToets(0,0,0); na_haar_dood_dialoog.select(1); return true; 33: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; Object na_haar_dood_dialoog class Character, with quip [a b; switch (a) { 12: "How will this black history end?"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 4, 4, 5, 6, 7); 41: "I will end my life this very night. I cannot live with this."; 42: deadflag = 3; return true; 43: qqon = true; killz = true; killq = true; 51: "I will spend the rest of my life in a small prison cell. That is my punishment."; 52: deadflag = 3; return true; 53: qqon = true; killz = true; killq = true; 61: "When the village understands what has happened, they will no longer have to see me as a human being, and they will lynch me as a monster. That is the way I wanted it: to be a human no more, but a monster."; 62: deadflag = 3; return true; 63: qqon = true; killz = true; killq = true; 71: "The village will not want to see the truth, and they will pretend to believe that Maartje's death was an accident. The rest of my life is one big reproach to myself, a punishment that is worse than what anyone could ever do to me."; 72: deadflag = 3; return true; 73: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; [IkOverwinLust; print "Although every sinew in your body screams that you should lay yourself down next to Maartje and become one with her, you turn around and walk away. You are stronger than your lust. You are stronger."; VraagToets(0,0,0); overwin_lust_vragen.select(1); ]; Object overwin_lust_vragen class Character, with quip [a b; switch (a) { 12: "Has the circle of lust been broken forever?"; 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 2, 2, 3); 21: "Yes. This was the last night I had to undertake this journey."; 22: "Will Maartje ever be able to forgive you for what you have done?^"; 23: qqon = true; killz = true; killq = true; 24: return Qlist(b, 2, 4, 5); 31: "No. This fight will have to be fought many more times."; 32: "Will Maartje ever be able to forgive you for what you have done?^"; 33: qqon = true; killz = true; killq = true; 34: return Qlist(b, 2, 4, 5); 41: "No. No matter whether I have ruined her life forever or not, she will always hate me."; 42: "Will your family ever be normal and happy again?^"; 43: qqon = true; killz = true; killq = true; 44: return Qlist(b, 3, 6, 7, 8); 51: "Yes. With time the wounds will heal and her hate will diminish; and perhaps there will be a day when she will understand me, just a little, and when she will feel just a very tiny amount of pity--or perhaps, even of love."; 52: "Will your family ever be normal and happy again?^"; 53: qqon = true; killz = true; killq = true; 54: return Qlist(b, 3, 6, 7, 8); 61: "It will take time, but it will happen. Even the worst wounds heal."; 62: deadflag = 3; return true; 63: qqon = true; killz = true; killq = true; 71: "No, if Maartje ever regains her life, it will be outside our family."; 72: deadflag = 3; return true; 73: qqon = true; killz = true; killq = true; 81: "Perhaps, but without me. This night, I will disappear from her life forever."; 82: deadflag = 3; return true; 83: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; [DoodMaartje x; ! 3 = wurgen, 4 = stikken, 5 = kerven if(final_beer has general) print "Maartje tries to hide behind her teddy "; if(final_beer hasnt general && final_deken_maartje has general) print "Maartje tries to pull her blanket even more tightly around her "; if(final_beer hasnt general && final_deken_maartje hasnt general) print "Helplessly, Maartje lies naked on the bed "; switch(x) { 3: print "as you walk towards her with deadly intention. You put your strong hands around her throat.^^"; 4: print "as you lean towards her with the pillow in your hands.^^"; 5: print "as you walk towards her with the razor-sharp shard. You push it softly against her throat.^^"; } dood_maartje_dialoog.select(1); if(dood_maartje_dialoog.keuze == 4) "You reconsider, and take a step backwards. Do you already have to stoop to this kind of plan? You sigh deeply."; switch(x) { 3: print "Then you squeeze Maartje's windpipe closed, as forcefully as you can. She struggles, but is powerless against your strength. Her face first becomes red, than blue, and in her eyes you can read pure panic. But you squeeze and squeeze and squeeze, and soon the little body beneath you slackens. Just to be certain that she is dead, you keep squeezing for a while."; 4: print "Then you push the pillow against her face, hard, so that it is certain that she cannot breath. Maartje struggles, but is powerless against your strength. Her flailing arms and legs attempt to hit and kick you, but without result, and soon their movements diminish, until they are finally quite still. You take away the pillow from Maartje's face. There she lies, pale and motionless. Dead."; 5: print "Than you open her throat with a single slash. Blood spurts over her neck, over your hands, over her body and the bed. It seems as if she tries to say something to you, but no words emerge from her mouth, only bright red blood that trickles down past her cheek. Then she falls backwards, and moves no more."; } VraagToets(0,0,0); maartje_zelfmoord_dialoog.select(1); pray_dialoog.dochter_dood(); maartje.state = x; return true; ]; Object dood_maartje_dialoog class Character, with keuze 0, quip [a b; switch (a) { 12: 13: qtype = MainMenu; qqon = true; killz = true; killq = true; 14: return Qlist(b, 3, 2, 3, 4); 21: "~Forgive me,~ you whisper. ~Forgive me.~"; 22: self.keuze = 2; return true; 23: qqon = true; killz = true; killq = true; 31: "~It is for the best. Believe me,~ you say hoarsely."; 32: self.keuze = 3; return true; 33: qqon = true; killz = true; killq = true; 41: "Abandon your resolution."; 42: self.keuze = 4; return true; 43: qqon = true; killz = true; killq = true; } rfalse; ], has concealed; !=================================================== ! Speciale zaken ! !=================================================== ! *** Menu *** !=================================================== Menu main_menu "Information about ~The baron~"; Menu -> "Reading interactive fiction (for new readers)"; Option -> -> "First aid with interactive fiction" with description "~The Baron~ is a story. But where the text you will see during a reading of a traditional story is predetermined, and all you have to do is read it, the text of an interactive story like ~The baron~ is constituted through the interaction of the reader with the computer program. Every time the program has shown you a piece of text, a prompt will appear on the screen, behind which you are supposed to type a new command. Through these commands you take a limited amount of control over the story.^^ You yourself thus play an active role in the fictional world. Central to the story is a protagonist, which the computer identifies with you. You control the protagonist by giving him commands. When you type the command 'EXAMINE BED', the protagonist will look at the bed, which will cause a more detailed description of this object to appear on the screen. When you type 'GET TOY', the toy will be picked up; 'OPEN DOOR' will cause the protagonist to attempt to open the door; and so forth. Please experiment with these and other verbs; a part of the fun of interactive fiction is finding out what is possible within the fictional world.^^ You should be conscious of the fact that the computer program has but a limited vocabulary and grammatical knowledge, and is best spoken to is short and simple sentences. Where 'GET THE TOY' and 'GET TOY' both work, 'GET THE FLUFFY ANIMAL' probably won't, and 'WOULD YOU PLEASE PICK UP THE TOY?' will baffle the computer. Try to attain your goals with short commands, using simple verbs and nouns.^^ But one shouldn't underestimate the program. Complex sentences like 'PUT THE CLOTHES ON THE CHAIR', 'OPEN THE DOOR WITH THE BRONZE KEY' and 'PUT EVERYTHING ON THE TABLE EXCEPT FOR THE AMPHORA' will be understood by most programs, at least if those objects exist in the fictional world.^^ Finally, it is useful to realise that the complexity of the program is limited, and it is therefore impossible to model an entire world. In general, for instance, it is the case that the program keeps track of the room you are in, but of your location within that room or the way you are facing. Commands like 'WALK TO THE CUPBOARD' and 'TURN AROUND' will not work in most interactive stories. When you play more interactive fiction, you will discover by trial and error which aspects of the world generally are, and which generally are not modelled."; Option -> -> "Important commands" with description "Which commands are accepted by a story depends very much on the particular story, but there is a basis of general and very useful commands that almost every story will understand. The following commands will be useful in nearly every story:^^^ LOOK:^^ Abbreviated as L. This commands had the protagonist look around, and reprints the description of the room where he or she is located.^^ EXAMINE :^^ Abbreviated as X. The protagonist will take a more precise look at the person or object you ask him to examine. It is generally a good idea to examine everything you deem important for the story as soon as you come upon it. Don't forget to examine the things you are carrying, and the protagonist himself: EXAMINE ME, X ME, or something similar.^^ INVENTORY:^^ Abbreviated as I. This command shows everything the protagonist is carrying; thus, everything you have picked up, and everything the protagonist already had in his possession when the story started. It is often a good idea to type I at the beginning of the story.^^ GO :^^ There are ten standard directions: NORTH, SOUTH, WEST, EAST, SOUTHWEST, SOUTHEAST, NORTHWEST, NORTHEAST, UP and DOWN. All of these can be abbreviated, to; N, S, W, E, SW, SE, NW, NE, U and D. You can also leave out the GO command: GO NORTH, NORTH, GO N and N all have the same effect. Some stories will allow you to move in other ways as well: GO IN CAR, for example, or GO TO BEDROOM. You will have to find this out for yourself.^^^ A short list of verbs that speak for themselves:^^ TAKE or GET ^^ PUT DOWN or DROP ^^ PUT ON ^^ OPEN ^^ CLOSE ^^ GIVE TO ^^ WEAR ^^ UNLOCK WITH ^^ And in ~The Baron~ you can speak to people by typing SPEAK WITH .^^^ And so forth. Try to find out which verbs do and which do not work in any given situation by experimentation. When the writer of a story has done a good job, the option which seems most natural to you will be supported."; Option -> -> "Meta-commands: saving, loading, quiting" with description "Most interactive stories support a number of important meta-commands. These do not influence the story, but can be very useful to the reader.^^^ SAVE:^^ You are asked to supply a filename, and the current state of the story is saved, so you can return to it later.^^ RESTORE:^^ You are asked to supply a filename, and the state of the story which was saved there will be restored. By using SAVE and RESTORE, you can prevent having to start the story anew every time you try something dangerous and get a disastrous result.^^ RESTART:^^ You return the story to its initial state.^^ QUIT:^^ This quits the program entirely. It will ask you for a confirmation. Instead of 'yes' and 'no', you can also type 'y' and 'n'.^^ UNDO:^^ With this useful command you can undo the last action you have taken. The story returns to the state it was in before you took this action."; Menu -> "Reading ~The Baron~ (also important for experienced readers)"; Option -> -> "No puzzles, but thematic choices" with description "~The Baron~ is not a traditional text adventure. There are no puzzles to solve, and you cannot win or lose. It is quite literally interactive fiction, not a game. The aim is to experience the fictional world and its disturbing themes as intensely as possible.^^ There are several things that the player should be conscious of while reading the story. There is no possible way to get the story into a state from which it is impossible to complete it. Nor is it possible to reach a sudden end before the story has come to its true end. In addition, the story has been designed in such a way that almost every sensible action propels it forward: there are no real obstacles on the way to the end. The question is not WHETHER the reader will reach the end of the story, but HOW he or she will reach that end.^^ What the reader has to ask him- or herself while reading the piece is not: will this action help me finish the story?, but: do I think this action is appropriate, beautiful, disturbing or otherwise thematically interesting? When one comes upon an axe, one can either take it or not take it; neither is necessary to reach the end of the story. The choice is thematic: do you want to tell a story in which the protagonist faces his problem with an axe in his hands, or rather one where he sets out to gets what he wants unarmed?^^ The story contains several important junctions, all of which can be resolved in many different ways. The choices that the player will make will have an important impact on the meaning of the story; and that is what ~The Baron~ is all about: the reader enters the stage as a creative thematic force, selecting symbols and actions that reflect his or her own taste and insight."; Option -> -> "Emotional content and age advice" with description "~The Baron~ is about a tragic and possibly shocking theme. It is certainly not appropriate reading for children; I advice an age limit of at least fifteen years. In addition, anyone who does not want to be confronted with fictional misery would do better to avoid this story.^^ For the Spring Thing competition, wherein you will have to read a given number of works in order to be allowed to vote, this may mean that you will have to give ~The Baron~ a one when you decide to avoid it for this reason. Don't hesitate to do so. I would much rather have a one than a reader who reads on against his or her wishes."; Menu -> "Walkthroughs and design philosophy"; Option -> -> "WARNING" with description "It is better not to read the information in this part of the menu until you have read and dealt with ~The Baron~ at least once. The 'walkthroughs' indicate how you could progress through the story in several different ways, and thus destroy the possibility of finding this out for yourself. The treatise on design philosophy is about the goal I tried to achieve by writing ~The Baron~, and that, too, is something you shouldn't know beforehand, in order to approach the story itself without preconceptions."; Option -> -> "Walkthrough" with description "Because there are no puzzles in ~The Baron~, you probably will not need a walkthrough. Nevertheless, I here provide a way to get from the beginning to the end. Sometimes, the program will wait for you to press a key; this has not been indicated in this walkthrough.^^^ N . N . N . N . N . N . D . E . E . E . Y . E . 1 . 1 . 1 . 1 . N . NW . N . U . KILL BARON . KILL BARON . 1. TAKE CROWN . WEAR CROWN . OPEN DOORS . BREAK MIRROR . GET SHARD . KILL ME . 1 . 1 . 1"; Option -> -> "Design philosophy" with description ""; Option -> "Copyright" with description "Copyright 2004, Victor Gijsbers^^ ~The Baron~ is published under the GNU General Public License version 3, or (at your discretion) any later version of this license. This means that both the program and the source code are available free of charge and can be copied and spread in every way you want. However, all software and other works wherein parts of this program or its source code are used must also be published under that same version of the GNU General Public License. Please read the license for detail.^^^ This program is free software; you can redistribute it and/or modify^ it under the terms of the GNU General Public License as published by^ the Free Software Foundation; either version 3 of the License, or^ (at your option) any later version.^^ This program is distributed in the hope that it will be useful,^ but WITHOUT ANY WARRANTY; without even the implied warranty of^ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the^ GNU General Public License for more details.^^ You should have received a copy of the GNU General Public License^ along with this program; if not, write to the Free Software^ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA^^^ Look at http://www.gnu.org/licenses/gpl.txt for the full text of the GNU General Public License."; Menu -> "Credits, author, contact"; Option -> -> "Credits" with description "Much honour goes to the beta-testers of the Dutch version: Eva Deinum, Annette van de Kraats, Ivo Wever and Remko van der Pluijm. Without you, this entire attempt would have failed. In addition, I would like to thank a fifth beta-tester who hated the piece and did not want to be named in the credits.^^ This English translation has benefited mightily from the editing of Poster, Benjamin Yeung, Grim and Aaron Read.^^ While writing this game, I gratefully used Graham Nelson's ~Inform~ and Yuri Robber's translation of the Dutch Inform library. I used the following extensions: pname.h by Neil Cerutti; GoNeighbour by Alan Trewartha; menus by Graham Nelson; and gtalk.h by Greg Boettcher and Mark J. Tilford. Special thanks go to Greg Boettcher for his speedy updates to gtalk.h.^^ The story was inspired by a collaborative story-telling game I once played with Arnaud de Callafon and Dirk-Jan van Vliet. It stuck in my head and wanted to be told. Even earlier inspiration was found in the confidences of a young woman, whose strength and ability to forgive I admired.^^ ~The Baron~ was written using open source software exclusively, including: Gentoo Linux, Suse Linux, Inform, Frotz, Gnome Terminal, KWrite, Gedit, OpenOffice.org, Mozilla Firefox and Mozilla Thunderbird. Most of this software is also free (as in freedom)."; Option -> -> "Author and version" with description "The interactive story ~The Baron~ was written by Victor Gijsbers. It is his first work of Interactive Fiction.^^ This is the English version of Release 2. (There is no other version of Release 2.)"; Option -> -> "Contact" with description "Contact me if you have questions, comments or bug reports: victor@@64lilith.gotdns.org."; [ MenuSub; main_menu.select(); ]; !=================================================== ! *** Technische Subs *** !=================================================== [ VraagToets a b c i; ! This routine is called with 3 options, a, b and c, and returns nothing. ! In any case, the routine prints two returns, and waits for a key to be pressed. ! If a = 1, the routine prints a bold-faced messages asking for a key to be pressed. ! If b = 1, the routine clears the screen once the key is pressed. ! If c = 1, the routine executes the Look-command after the key is pressed. print "^^"; if(a == 1){style bold;print "[Press a key.]^";style roman;}; @read_char 1 -> i; if(b == 1) @erase_window -1; if(c == 1) {print "^"; <>;}; ]; ! *** The normal routine from parserm.h, but without the turns *** [ DrawStatusLine width posa posb; #Ifdef TARGET_GLULX; ! If we have no status window, we must not try to redraw it. if (gg_statuswin == 0) return; #Endif; ! If there is no player location, we shouldn't try to draw status window if (location == nothing || parent(player) == nothing) return; StatusLineHeight(gg_statuswin_size); MoveCursor(1, 1); width = ScreenWidth(); posa = width-26; posb = width-13; spaces width; MoveCursor(1, 2); if (location == thedark) { print (name) location; } else { FindVisibilityLevels(); if (visibility_ceiling == location) print (name) location; else print (The) visibility_ceiling; } if (sys_statusline_flag && width > 53) { MoveCursor(1, posa); print (string) TIME__TX; LanguageTimeOfDay(sline1, sline2); } else { if (width > 66) { #Ifndef NO_SCORE; MoveCursor(1, posa); print (string) SCORE__TX, sline1; #Endif; MoveCursor(1, posb); ! print (string) MOVES__TX, sline2; Commented this line out } #Ifndef NO_SCORE; if (width > 53 && width <= 66) { MoveCursor(1, posb); print sline1, "/", sline2; } #Endif; } MainWindow(); ! set_window ]; ! *** Affecting scope in the dark *** [ InScope person; if (person in kasteel_kerker) { if (person == player && location == thedark) { PlaceInScope(kerker_luik); PlaceInScope(kasteel_kerker_druppels); } } rfalse; ]; [ AfterGameOver i; VraagToets(0,0,0); .RRQPL; L__M(##Miscellany,5); .RRQL; print "> "; #Ifdef TARGET_ZCODE; #IfV3; read buffer parse; #Endif; ! V3 temp_global=0; #IfV5; read buffer parse DrawStatusLine; #Endif; ! V5 #Ifnot; ! TARGET_GLULX KeyboardPrimitive(buffer, parse); #Endif; ! TARGET_ i = parse-->1; if (i == QUIT1__WD || i == QUIT2__WD || i == 'quit') { #Ifdef TARGET_ZCODE; quit; #Ifnot; ! TARGET_GLULX quit; #Endif; ! TARGET_ } if (i == RESTART__WD || i == 'restart') { #Ifdef TARGET_ZCODE; @restart; #Ifnot; ! TARGET_GLULX @restart; #Endif; ! TARGET_ } if (i == RESTORE__WD || i == 'restore') { RestoreSub(); jump RRQPL; } if (i == 'menu') { new_line; MenuSub(); jump RRQPL; } #IfV5; if (i == UNDO1__WD or UNDO2__WD or UNDO3__WD) { if (undo_flag == 0) { L__M(##Miscellany, 6); jump RRQPL; } if (undo_flag == 1) jump UndoFailed2; #Ifdef TARGET_ZCODE; @restore_undo i; #Ifnot; ! TARGET_GLULX @restoreundo i; i = (~~i); #Endif; ! TARGET_ if (i == 0) { .UndoFailed2; L__M(##Miscellany, 7); } jump RRQPL; } #Endif; ! V5 L__M(##Miscellany, 8); jump RRQL; ];